//package com.lt.test.consumer.controller;
//
//import com.lt.test.common.util.HttpClientUtil;
//import com.lt.test.common.util.WebUtils;
//import com.lt.test.consumer.entity.Order;
//import com.lt.test.consumer.entity.Pay;
//import com.lt.test.consumer.entity.Refund;
//import com.lt.test.consumer.util.*;
//import net.sf.json.JSONObject;
//import org.dom4j.Document;
//import org.dom4j.DocumentException;
//import org.dom4j.DocumentHelper;
//import org.dom4j.Element;
//import org.springframework.stereotype.Controller;
//import org.springframework.ui.ModelMap;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RequestMethod;
//import org.springframework.web.bind.annotation.ResponseBody;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.io.IOException;
//import java.net.URLEncoder;
//import java.util.*;
//
//@Controller
//@RequestMapping("/wechat")
//public class WeChatHttpServlet {
//
//	private static Properties pps = new Properties();
//
//	@RequestMapping("/weLogin")
//	public void weLogin(HttpServletRequest req, HttpServletResponse res) throws IOException {
//		// 这个地址需要更换
//		String wxCode = req.getParameter("wxCode")==null?null: req.getParameter("wxCode");
//		String returnURL = "http://weixin.skystorechain.com/SpringBoot_Dubbo_web/wechat/callBack?wxCode="+wxCode;
//		String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + WeChatUtil.APPID + "&redirect_uri="
//				+ URLEncoder.encode(returnURL) + "&response_type=code" + "&scope=snsapi_base"
//				+ "&state=STATE#wechat_redirect";
//		// 进行重定向
//		res.sendRedirect(url);
//	}
//
//	@RequestMapping("/callBack")
//	public String callBack(HttpServletRequest req, HttpServletResponse res, ModelMap model) throws IOException {
//		// 2 第二步：通过code换取网页授权access_token
//		// 微信返回的参数会自动返回
//		String code = req.getParameter("code");
//		String wxCode = req.getParameter("wxCode")==null?null: req.getParameter("wxCode");
//		String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + WeChatUtil.APPID + "&secret="
//				+ WeChatUtil.APPSECRET + "&code=" + code + "&grant_type=authorization_code";
//
//		JSONObject jsonObject = WeChatUtil.getJSONObject(url);
//		String openid = jsonObject.getString("openid");
//		pps.load(this.getClass().getResourceAsStream("/url.properties"));
//		String urlAdd = pps.getProperty("getUserInfo");
//		Map<String, String> data = new HashMap<>();
//		data.put("token",openid);
//		String responseResult = HttpClientUtil.sendPostRequest(urlAdd, data, null, null);
//		JSONObject json = JSONObject.fromObject(responseResult);
//
//		JSONObject json_result = (JSONObject)json.get("data");
//		String userId = json_result.getString("userId");
//		String mobile = json_result.getString("mobile");
//		model.put("wxCode",wxCode);
//		model.put("openid", openid);
//		model.put("userId",userId);
//		model.put("mobile",mobile);
//		return "content/honest/wxlogin";
//	}
//
//	@RequestMapping(value = "/pay", method = { RequestMethod.GET,
//			RequestMethod.POST }, produces = "text/html;charset=UTF-8")
//	public @ResponseBody
//    String prePay(HttpServletRequest request, HttpServletResponse response) {
//		String openId = request.getParameter("openid");
//		String money = request.getParameter("money");
//		if (openId == null && money == null) {
//			return "error";
//		}
//		// 获取订单号 （当前时间 + 随机5位的参数）
//		String out_trade_no = request.getParameter("out_trade_no");
//		// 加密用的key *
//		String Key = WeChatUtil.APPSECRET;
//		// 微信支付分配的公众账号ID（企业号corpid即为此appId *
//		String appid = WeChatUtil.APPID;
//		// 微信支付分配的商户号 *
//		String mch_id = WeChatUtil.MCHID;
//		String spbill_create_ip = WeChatUtil.SPBILLIP;
//		// 支付的头说明
//		String body = "黔丰银通";
//		String trade_type = "JSAPI";
//		// url *
//		String notify_url = "http://weixin.skystorechain.com/SpringBoot_Dubbo_web/wechat/listen";
//		// 金额
//		int total_fee = Integer.valueOf(money);
//
//		// 获取随机字符串
//		String nonce_str = PayUtil.getRandomString(20);
//		SortedMap<Object, Object> parameters = new TreeMap<Object, Object>();
//		parameters.put("appid", appid);
//		parameters.put("mch_id", mch_id);
//		parameters.put("body", body);
//		parameters.put("nonce_str", nonce_str);
//		parameters.put("notify_url", notify_url);
//		parameters.put("out_trade_no", out_trade_no);
//		parameters.put("openid", openId);
//		parameters.put("spbill_create_ip", spbill_create_ip);
//		parameters.put("trade_type", trade_type);
//		parameters.put("total_fee", total_fee);
//		// jar包签名
//		// String sign = PayImpl.paySign(parameters, key);
//		// 手写签名
//		// 注：key为商户平台设置的密钥key
//		String sign = Sign.creatSign(parameters, Key);
//		Pay pay = new Pay();
//		pay.setAppid(appid);
//		pay.setBody(body);
//		pay.setMch_id(mch_id);
//		pay.setNonce_str(nonce_str);
//		pay.setNotify_url(notify_url);
//		pay.setOpenid(openId);
//		pay.setSign(sign);
//		pay.setOut_trade_no(out_trade_no);
//		pay.setSpbill_create_ip(spbill_create_ip);
//		pay.setTrade_type(trade_type);
//		pay.setTotal_fee(total_fee);
//		Xstreamutil.xstream.alias("xml", Pay.class);
//		String xml = Xstreamutil.xstream.toXML(pay).replaceAll("__", "_");
//		String requestUrl = "https://api.mch.weixin.qq.com/pay/unifiedorder";
//		String respxml = null;
//		String prepay_id = null;
//
//		try {
//			respxml = Httpsrequest.HttpsRequest(requestUrl, "POST", xml);
//		} catch (Exception e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//
//		try {
//			Document doc = DocumentHelper.parseText(respxml);
//			Element root = doc.getRootElement();
//			List<Element> elementList = root.elements();
//			for (int i = 0; i < elementList.size(); i++) {
//				if (elementList.get(i).getName().equals("prepay_id")) {
//					prepay_id = elementList.get(i).getTextTrim();
//				}
//			}
//		} catch (DocumentException e) {
//			e.printStackTrace();
//		}
//		String timeStamp = PayUtil.getTempStamp();
//		String Package = "prepay_id=" + prepay_id;
//		SortedMap<Object, Object> h5parameter = new TreeMap<Object, Object>();
//		h5parameter.put("appId", appid);
//		h5parameter.put("nonceStr", nonce_str);
//		h5parameter.put("package", Package);
//		h5parameter.put("signType", "MD5");
//		h5parameter.put("timeStamp", timeStamp);
//		String Paysign = Sign.creatSign(h5parameter, Key);
//
//		Map<String, Object> result = new HashMap<String, Object>();
//		result.put("appId", appid);
//		result.put("nonce_str", nonce_str);
//		result.put("package", Package);
//		result.put("paysign", Paysign);
//		result.put("timeStamp", timeStamp);
//
//		JSONObject jsonObject = JSONObject.fromObject(result);
//		return "success_jsonpCallback(" + jsonObject + ")";
//	}
//
//	@RequestMapping(value = "/refund", method = { RequestMethod.GET,
//			RequestMethod.POST }, produces = "text/html;charset=UTF-8")
//	public @ResponseBody
//    String refund(HttpServletRequest request, HttpServletResponse response) {
//		String total = request.getParameter("total");
//		String refund = request.getParameter("refund");
//		String outtrade = request.getParameter("outTrade");
//		String outrefund = request.getParameter("outRefund");
//		String Key = WeChatUtil.APPSECRET;
//		String appid = WeChatUtil.APPID;
//		String mch_id = WeChatUtil.MCHID;
//		String nonce_str = PayUtil.getRandomString(20);
//
//		SortedMap<Object, Object> parameters = new TreeMap<Object, Object>();
//		parameters.put("appid", appid);
//		parameters.put("mch_id", mch_id);
//		parameters.put("nonce_str", nonce_str);
//		parameters.put("out_trade_no", outtrade);
//		parameters.put("out_refund_no", outrefund);
//		parameters.put("total_fee", total);
//		parameters.put("refund_fee", refund);
//		String sign = Sign.creatSign(parameters, Key);
//
//		Refund param = new Refund();
//		param.setAppid(appid);
//		param.setMch_id(mch_id);
//		param.setNonce_str(nonce_str);
//		param.setOut_trade_no(outtrade);
//		param.setOut_refund_no(outrefund);
//		param.setTotal_fee(Integer.valueOf(total));
//		param.setRefund_fee(Integer.valueOf(refund));
//		param.setSign(sign);
//
//		Xstreamutil.xstream.alias("xml", Refund.class);
//		String xml = Xstreamutil.xstream.toXML(param).replaceAll("__", "_");
//		System.out.println(xml);
//		String requestUrl = "https://api.mch.weixin.qq.com/secapi/pay/refund";
//		String weixinPost = null;
//		try {
//			weixinPost = ClientCustomSSL.doRefund(requestUrl, xml).toString();
//		} catch (Exception e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//		String err_code = null;
//		String err_code_des = null;
//		try {
//			Document doc = DocumentHelper.parseText(weixinPost);
//			Element root = doc.getRootElement();
//			List<Element> elementList = root.elements();
//			for (int i = 0; i < elementList.size(); i++) {
//				if (elementList.get(i).getName().equals("err_code")) {
//					err_code = elementList.get(i).getTextTrim();
//				}
//				if (elementList.get(i).getName().equals("err_code_des")) {
//					err_code_des = elementList.get(i).getTextTrim();
//				}
//			}
//		} catch (DocumentException e) {
//			e.printStackTrace();
//		}
//		if (err_code == null && err_code_des == null) {
//			Map<String, String> data = WebUtils.getAllParamMap(request);
//			String url = "http://clouderp.skystorechain.com:20080/clouderp-shop-rest/api/shop/cancelSalesByOrderId";
//			String responseResult=HttpClientUtil.sendPostRequest(url, data, null, null);
//			JSONObject jsonObject = JSONObject.fromObject(responseResult);
//			return jsonObject.toString();
//		} else {
//			Map<String, Object> map = new HashMap<>();
//			map.put("err_code", err_code);
//			map.put("err_code_des", err_code_des);
//			Map<String,Object> result = new HashMap<>();
//			result.put("data", map);
//			result.put("msg",err_code_des);
//			result.put("code", "404");
//			JSONObject jo = JSONObject.fromObject(result);
//			return jo.toString();
//		}
//	}
//
//
//	@RequestMapping(value = "/orderQuery",method = { RequestMethod.GET,
//			RequestMethod.POST }, produces = "text/html;charset=UTF-8")
//	public @ResponseBody
//    String orderQuery(HttpServletRequest request, HttpServletResponse response){
//		String appid = WeChatUtil.APPID;
//		String mch_id = WeChatUtil.MCHID;
//		String out_trade_no = request.getParameter("oriOrderId");
//		String userId =request.getParameter("userId");
//		String shopId= request.getParameter("shopId");
//		String type = request.getParameter("type");
//		if(out_trade_no==null||out_trade_no==""){
//			return null;
//		}
//		String nonce_str = PayUtil.getRandomString(20);
//		String key = WeChatUtil.APPSECRET;
//		SortedMap<Object, Object> parameters = new TreeMap<Object, Object>();
//		parameters.put("appid", appid);
//		parameters.put("mch_id", mch_id);
//		parameters.put("out_trade_no", out_trade_no);
//		parameters.put("nonce_str", nonce_str);
//
//		String sign = Sign.creatSign(parameters, key);
//
//		Order order = new Order();
//		order.setAppid(appid);
//		order.setMch_id(mch_id);
//		order.setOut_trade_no(out_trade_no);
//		order.setNonce_str(nonce_str);
//		order.setSign(sign);
//		Xstreamutil.xstream.alias("xml", Order.class);
//		String xml = Xstreamutil.xstream.toXML(order).replaceAll("__", "_");
//		String requestUrl = "https://api.mch.weixin.qq.com/pay/orderquery";
//		String respxml = null;
//		String trade_state = null;
//
//		try {
//			respxml = Httpsrequest.HttpsRequest(requestUrl, "POST", xml);
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//
//		try {
//			Document doc = DocumentHelper.parseText(respxml);
//			Element root = doc.getRootElement();
//			List<Element> elementList = root.elements();
//			for (int i = 0; i < elementList.size(); i++) {
//				if (elementList.get(i).getName().equals("trade_state")) {
//					trade_state = elementList.get(i).getTextTrim();
//				}
//			}
//		} catch (DocumentException e) {
//			e.printStackTrace();
//		}
//		Map<String, Object> result = new HashMap<String, Object>();
//		JSONObject jsonObject = null;
//		if("SUCCESS".equals(trade_state)){
//			String url = "http://10.95.0.233:23912/clouderp-pay-rest/api/pay/getWxCode";
//			Map<String, String> data = new HashMap<String, String>();
//			data.put("oriOrderId",out_trade_no);
//			data.put("userId",userId);
//			data.put("shopId",shopId);
//			data.put("type",type);
//			String responseResult = HttpClientUtil.sendPostRequest(url, data, null, null);
//			jsonObject= JSONObject.fromObject(responseResult);
//		}else{
//			result.put("code","400");
//			result.put("result","订单未支付");
//			jsonObject = JSONObject.fromObject(result);
//		}
//
//		return "success_jsonpCallback(" + jsonObject + ")";
//	}
//
//
//
//	@RequestMapping(value = "/getQrCode",method = { RequestMethod.GET,
//			RequestMethod.POST }, produces = "text/html;charset=UTF-8")
//	public @ResponseBody
//    String getQrCode(HttpServletRequest request, HttpServletResponse response) {
//		Map<String, String> data = WebUtils.getAllParamMap(request);
//		try{
//			pps.load(this.getClass().getResourceAsStream("/url.properties"));
//		}catch (Exception e){
//			e.printStackTrace();
//			return "success_jsonpCallback(error)";
//		}
//		String url = pps.getProperty("getQrCode");
//		String responseResult = HttpClientUtil.sendPostRequest(url, data, null, null);
//		JSONObject jsonObject = JSONObject.fromObject(responseResult);
//		return "success_jsonpCallback(" + jsonObject + ")";
//	}
//
//
//	@RequestMapping(value = "/queryTrade",method = { RequestMethod.GET,
//			RequestMethod.POST }, produces = "text/html;charset=UTF-8")
//	public @ResponseBody
//    String queryTrade(HttpServletRequest request, HttpServletResponse response) {
//		Map<String, String> data = WebUtils.getAllParamMap(request);
//		try{
//			pps.load(this.getClass().getResourceAsStream("/url.properties"));
//		}catch (Exception e){
//			e.printStackTrace();
//			return "success_jsonpCallback(error)";
//		}
//		String url = pps.getProperty("queryTrade");
//		String responseResult = HttpClientUtil.sendPostRequest(url, data, null, null);
//		JSONObject jsonObject = JSONObject.fromObject(responseResult);
//		return "success_jsonpCallback(" + jsonObject + ")";
//	}
//}
